import axios from "axios";
import {
	ElMessage
} from 'element-plus'
import router from '@/router'

const http = axios.create({
	baseURL: 'http://localhost:8080/materials-consumable',
	//请求超时时间
	timeout: 60000
});

export const asyncHttp = <T>(url : string, method = 'get', data = {}, config = {}) => {
	//根据请求方式拼接参数
	const params = method == 'get' ? { params: data } : { data: data };
	//参数1:代表成功 参数2:代表失败
	return new Promise((resolve : (value : T) => void, reject) => {
		http({
			method: method,
			url: url,
			...params,
			...config
		})
			// .then((resp) => {
			// 	const { data } = resp;
			// 	console.log(data.errCode);
			// })
			//处理成功
			.then(({ data }) => {
				console.log(data.errCode);
				//判断后端逻辑处理是否成功
				if (data.errCode = 'success') {
					//处理成功逻辑
					resolve(data);
				} else {
					//弹窗提示
					ElMessage({
						message: data.errMsg,
						type: 'error'
					})
				}
			})
			//处理失败
			.catch((err) => {
				console.log(err);
				//弹窗提示
				ElMessage({
					message: '服务器内部错误',
					type: 'error'
				})
			})
	})
		//返回成功数据
		.then((value) => {
			return value;
		});
}
// 添加请求拦截器
http.interceptors.request.use(function (config) {
	// 在发送请求之前做些什么
	console.log(123);

	//请求头携带用户数据
	config.headers['token'] = localStorage.getItem("id");
	config.headers['satoken'] = localStorage.getItem("satoken");

	if (config.method == 'post' && !config.headers["Content-Type"]) {
		config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
	}


	return config;
}, function (error) {
	// 对请求错误做些什么
	return Promise.reject(error);
});
// 添加响应拦截器
http.interceptors.response.use(function (response) {
	// 2xx 范围内的状态码都会触发该函数。
	// 对响应数据做点什么

	if (response.data.errCode == 'F401') {
		router.push('/login');
		/* router.push({
			path: '/ssoLogin',
			query: {
				back: encodeURIComponent(location.href)
			}
		}); */

		// 对响应数据做点什么
		return response;
	}
	return response;
}, function (error) {
	// 超出 2xx 范围的状态码都会触发该函数。
	// 对响应错误做点什么
	return Promise.reject(error);
});











